#pragma once

namespace AVUI
{

class PropertyChangedEventArgs : public EventArgs
{
public:
    DECLARE_ELEMENT(PropertyChangedEventArgs, EventArgs);

    PropertyChangedEventArgs(Property* pProperty) : m_pProperty(pProperty)
    {

    }

    Property* get_Property() { return m_pProperty; };

private:
    Property* m_pProperty;
};


class INotifyPropertyChanged
{
public:
    virtual void add_PropertyChanged(TDelegate<PropertyChangedEventArgs>* pEventHandler) = 0;
    virtual void remove_PropertyChanged(TDelegate<PropertyChangedEventArgs>* pEventHandler) = 0;
    virtual Object* get_Object() = 0;
};


DEFINE_EVENTHANDLER(PropertyChanged);

};

